# encoding=utf-8

import warnings
warnings.filterwarnings('ignore')
#显示所有行和列
import numpy as np
import pandas as pd
np.set_printoptions(threshold=np.inf)
pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None)
#显示中文
from pylab import *  #显示中文
mpl.rcParams['font.sans-serif'] = ['SimHei']  #显示中文
#画图中显示负号
import matplotlib
matplotlib.rcParams['axes.unicode_minus'] = False

# 使用小型共享单车数据集，完成以下操作（hour.csv）
# 1.	导入必要的库（7分）
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(style="darkgrid")   #这是seaborn默认的风格
# 2.	导入数据（7分）
# import ssl
# ssl._create_default_https_context = ssl._create_unverified_context
# tips = sns.load_dataset('tips')
hour = pd.read_csv('hour.csv')
print(hour.head())
# 3.	查看数据信息（信息函数）（8分）
hour.info()
# 4.	查看列名（8分）
print(hour.columns)
# 5.	绘制小时和季节影响点线图

# a)	使用season和hr进行分组，按照hr排序，求cnt均值（10分）
df = hour.groupby(by=['season','hr'], sort='hr')['cnt'].mean()
print(df)
# b)	重置索引值（10分）
df = df.reset_index()
print(df)
# c)	绘制点线图（10分）

sns.stripplot(x = 'season', y = 'cnt', data = df)
plt.show()

sns.stripplot(x = 'hr', y = 'cnt', data = df)
plt.show()

sns.swarmplot(x = 'hr', y = 'cnt', data = df)
plt.show()

# d)	X为hr，y为cnt，绘制4条点线图（10分）
sns.stripplot(x = 'hr', y = 'cnt', data = df, hue = 'season', dodge=True, jitter=True,palette='Set2')
plt.show()
# e) 绘制箱线图
sns.boxplot(x = 'season', y = 'cnt', data = df )
plt.show()
# f) 绘制小提琴图
ax = sns.violinplot(x = 'season', y = 'cnt', data = df )
plt.show()
# g) 绘制条形图
sns.barplot(x = 'season', y = 'cnt', data = df, capsize= 0.5, errcolor= 'k' )
plt.show()

#h)绘制计数图:
sns.countplot( x = 'season', hue = 'hr' , data = df)  #x,y不能同时指定
plt.show()

#i)直方图
sns.distplot(df['cnt'],bins= 10, hist = True, kde = True, color = 'k', rug=True, axlabel = 'cnt')
plt.show()

#j)联合分布图
sns.jointplot(x = 'season', y = 'cnt', data = df, height = 5)
plt.show()

#k)变量关系图
sns.pairplot(hour, vars = ['temp', 'hum', 'windspeed', 'cnt'],diag_kind='hist')
plt.show()

#l)回归图
sns.lmplot(x = 'hr', y = 'cnt', hue = 'season', data = df)
plt.show()

# 6.	绘制热力图

# a)	查看['temp', 'atemp', 'hum', 'windspeed', 'cnt']的皮尔逊系数（10分）
heat = hour[['temp', 'atemp', 'hum', 'windspeed', 'cnt']].corr()
print(heat)
# b)	绘制热力图（10分）
sns.heatmap(data = heat)
plt.show()
# c)	热力图上标有数值（10分）
sns.heatmap( data = heat, annot = True, annot_kws = {'size':9, 'weight':'bold', 'color': 'w'}, fmt='.2f')
plt.show()
